/*
  &a[1]=a=a[0]
*/

#include <iostream>
using namespace std;

int (*func(int i, int (*a)[10]))[10] {
  //  &a[1];是错误写法，因为传过来的是一个指向10个整数的地址（指针）
  // (&a)[2]也是错误写法
  int(*p)[10] = &a[1];
  return p;
}

auto func1(int i, int (*a)[10]) -> int (*)[10] {
  int(*p)[10] = a;
  return p;
}

int main(int argc, char const *argv[]) {
  /*
     code
     &a[0]等价于a
     p是一个指向10个整数的指针
     注意不是10个整数的首地址
      *P得到的10个整数(也就是一个数组10个元素整体，表现为地址)
      **p得到的是该数组的首元素
   */
  int a[][10] = {{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, {5}};
  int(*p)[10] = func(0, &a[0]);
  cout << **p << endl;
  cout << func1(0, a) << endl;
  return 0;
}
